//删除并获得点数
//测试链接：https://leetcode.cn/problems/delete-and-earn/
public class DeleteAndEarn {
    public int deleteAndEarn(int[] nums) {
        int n = 10001;
        // 1. 预处理
        int[] arr = new int[n];
        for (int x : nums)
            arr[x] += x;

        // 2. dp
        // 创建 dp 表
        int[] f = new int[n];
        int[] g = new int[n];

        // 初始化
        f[0] = arr[0];
        // 填表
        for (int i = 1; i < n; i++) {
            f[i] = g[i - 1] + arr[i];
            g[i] = Math.max(f[i - 1], g[i - 1]);
        }
        // 返回值
        return Math.max(f[n - 1], g[n - 1]);
    }
}
